/**
 * 数据库管理API
 */

import type {
  DatabaseConnectionRequest,
  DatabaseConnectionTestResponse,
  DatabaseTablePageQuery,
  DatabaseTableVO,
  TableImportRequest
} from "./type"
import { http } from "@/http/index"

/** 数据库管理API */
export const databaseApi = {
  /**
   * 测试数据库连接
   * @param params 数据库连接配置参数
   */
  testConnection: (params: DatabaseConnectionRequest) => {
    return http.post<{ data: DatabaseConnectionTestResponse }>("/database/test-connection", params)
  },

  /**
   * 获取数据库表列表
   * @param params 数据库连接配置参数
   */
  getTables: (params: DatabaseConnectionRequest) => {
    return http.post<ApiResponseData<DatabaseTableVO[]>>("/database/tables", params)
  },

  /**
   * 获取表详细信息
   * @param tableName 表名
   * @param params 数据库连接配置参数
   */
  getTableDetail: (tableName: string, params: DatabaseConnectionRequest) => {
    return http.post<ApiResponseData<DatabaseTableVO>>(`/database/tables/${tableName}`, params)
  },

  /**
   * 导入数据表
   * @param connectionParams 数据库连接配置
   * @param importParams 导入参数
   */
  importTables: (connectionParams: DatabaseConnectionRequest, importParams: TableImportRequest) => {
    return http.post<Record<string, any>>("/database/import", {
      ...connectionParams,
      ...importParams
    })
  },

  /**
   * 获取已导入的表列表
   * @param params 查询参数
   */
  getImportedTables: (params: DatabaseTablePageQuery = {}) => {
    return http.get<PageData<DatabaseTableVO>>("/database/imported", { params })
  },

  /**
   * 同步表结构
   * @param tableId 表ID
   * @param params 数据库连接配置参数
   */
  syncTableStructure: (tableId: number, params: DatabaseConnectionRequest) => {
    return http.post<Record<string, any>>(`/database/tables/${tableId}/sync`, params)
  },

  /**
   * 更新表信息
   * @param tableId 表ID
   * @param tableComment 表描述
   */
  updateTableInfo: (tableId: number, tableComment: string) => {
    return http.put<void>(`/database/tables/${tableId}`, null, {
      params: { tableComment }
    })
  },

  /**
   * 删除已导入的表
   * @param tableIds 表ID列表
   */
  deleteTables: (tableIds: number[]) => {
    return http.delete<void>("/database/tables", { data: tableIds })
  },

  /**
   * 生成表DDL
   * @param tableId 表ID
   */
  generateTableDDL: (tableId: number) => {
    return http.get<string>(`/database/tables/${tableId}/ddl`)
  },

  /**
   * 获取表关联关系
   * @param projectId 项目ID
   */
  getTableRelations: (projectId: number) => {
    return http.get<Record<string, any>[]>("/database/relations", {
      params: { projectId }
    })
  }
}

export * from "./type"
